package cn.dxj1016.lambda;
/*
推导lambda表达式
 */
public class TestLambda1 {
//    3.静态内部类
    static class Like2 implements ILike {

    @Override
    public void lambda() {
        System.out.println("i like lambda2");
    }
}

    public static void main(String[] args) {
        ILike like = new Like();
        like.lambda();

         like = new Like2();
         like.lambda();


//         4.局部内部类
        class Like3 implements ILike {

            @Override
            public void lambda() {
                System.out.println("i like lambda2");
            }
        }
        like = new Like3();
        like.lambda();

//        5.匿名内部类,没有类的名称，必须借助接口或者父类
        like=new ILike() {
            @Override
            public void lambda() {
                System.out.println("i like lambda4");

            }
        };
        like.lambda();

//        6.用lambda简化
        like=()->{
            System.out.println("i like lambda5");
        };
        like.lambda();

    //        7.简化6，参数类型
//        like=(a)->{
//            System.out.println("i like lambda"+a);
//        };
//        like.lambda(7);

//        8.简化7，简化括号
//        like=a->{
//            System.out.println("i like lambda"+a);
//        };
//        like.lambda(8);

//        9.简化8，去掉花括号;如果多条语句就不能简化花括号
//        like=a->System.out.println("i like lambda"+a);
//        like.lambda(9);

//        总结：
//        Lambda表达式只能有一行代码的情况下才能就简化成为一行，如果有多行，那么就要用代码块包裹。
//        前提是接口为函数式接口
//        多个参数也可以去掉参数类型，要去掉就都去掉，必须加上括号
    }
}


//1.定义一个函数式接口
interface ILike {
    void lambda();

}

//2.实现类
class Like implements ILike {
    @Override
    public void lambda() {
        System.out.println("i like lambda");
    }

}